home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagn_r.zip / POINTERS.SWG / 0018_Example of LINKED Records.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-24  |  5KB  |  239 lines

  1. program LinkLst2;
  2.  
  3. uses
  4.   Crt;
  5.  
  6. const
  7.   FileName = 'LinkExp.dta';
  8.  
  9. type
  10.   PMyNode = ^TMyNode;
  11.   TMyNode = record
  12.     Name  : String;
  13.     Flight: integer;
  14.     Day   : String;
  15.     Next  : PMyNode;  {Used to link each field}
  16.   end;
  17.  
  18. procedure CreateNew(var Item: PMyNode);
  19. begin
  20.   New(Item);
  21.   Item^.Next := nil;
  22.   Item^.Name := '';
  23.   Item^.Flight := 0;
  24.   Item^.Day := '';
  25. end;
  26.  
  27. procedure GetData(var Item: PMyNode);
  28. begin
  29.   ClrScr;
  30.   repeat
  31.     GotoXY(1, 1);
  32.     Write('Enter Name: ');
  33.     Read(Item^.Name);
  34.   until (Item^.Name <> '');
  35.   GotoXY(1, 2);
  36.   Write('Enter Flight number: ');
  37.   ReadLn(Item^.Flight);
  38.   GotoXY(1, 3);
  39.   Write('Enter Day: ');
  40.   ReadLn(Item^.Day);
  41. end;
  42.  
  43. procedure DoFirst(var First, Current: PMyNode);
  44. begin
  45.   CreateNew(Current);
  46.   GetData(Current);
  47.   First := Current;
  48. end;
  49.  
  50. procedure Add(var Prev, Current: PMyNode);
  51. begin
  52.   Prev := Current;
  53.   CreateNew(Current);
  54.   GetData(Current);
  55.   Prev^.Next := Current;
  56. end;
  57.  
  58. procedure DeleteNode(var Head, Node, Current: PMyNode);
  59. var
  60.   Temp: PMyNode;
  61. begin
  62.   Temp := Head;
  63.   while Temp^.Next <> Node do
  64.     Temp := Temp^.Next;
  65.   if Temp^.Next^.Next <> nil then
  66.     Temp^.Next := Temp^.Next^.Next
  67.   else begin
  68.     Temp^.Next := nil;
  69.     Current := Temp;
  70.   end;
  71.   Dispose(Node);
  72. end;
  73.  
  74. function Find(Head: PMyNode; S: String): PMyNode;
  75. var
  76.   Temp: PMyNode;
  77. begin
  78.   Temp := nil;
  79.   while Head^.Next <> nil do begin
  80.     if Head^.Name = S then begin
  81.       Temp := Head;
  82.       break;
  83.     end;
  84.     Head := Head^.Next;
  85.   end;
  86.   if Head^.Name = S then Temp := Head;
  87.   Find := Temp;
  88. end;
  89.  
  90. procedure DoDelete(var Head, Current: PMyNode);
  91. var
  92.   S: String;
  93.   Temp: PMyNode;
  94. begin
  95.   ClrScr;
  96.   Write('Enter name from record to delete: ');
  97.   ReadLn(S);
  98.   Temp := Find(Head, S);
  99.   if Temp <> nil then
  100.     DeleteNode(Head, Temp, Current);
  101. end;
  102.  
  103. procedure ShowRec(Item: PMyNode; i: Integer);
  104. begin
  105.   GotoXY(1, i); Write('Name: ', Item^.Name);
  106.   GotoXY(25, i); Write('Flight: ', Item^.Flight);
  107.   GotoXY(45, i); Write('Day: ', Item^.Day);
  108. end;
  109.  
  110. procedure Show(Head: PMyNode);
  111. var
  112.   i: Integer;
  113. begin
  114.   i := 1;
  115.   ClrScr;
  116.   while Head^.Next <> nil do begin
  117.     Head := Head^.Next;
  118.     ShowRec(Head, i);
  119.     Inc(i);
  120.   end;
  121.   WriteLn;
  122.   WriteLn('==========================================================');
  123.   WriteLn(i, ' records shown');
  124.   ReadLn;
  125. end;
  126.  
  127. procedure FreeAll(var Head: PMyNode);
  128. var
  129.   Temp: PMyNode;
  130. begin
  131.   while Head^.Next <> nil do begin
  132.     Temp := Head^.Next;
  133.     Dispose(Head);
  134.     Head := Temp;
  135.   end;
  136.   Dispose(Head);
  137. end;
  138.  
  139. procedure CreateNewFile(Head: PMyNode);
  140. var
  141.   F: File of TMyNode;
  142. begin
  143.   Assign(F, FileName);
  144.   ReWrite(F);
  145.   while Head^.Next <> nil do begin
  146.     Write(F, Head^);
  147.     Head := Head^.Next;
  148.   end;
  149.   Write(F, Head^);
  150.   Close(F);
  151. end;
  152.  
  153. procedure ReadFile(var First, Prev, Current: PMyNode);
  154. var
  155.   F: File of TMyNode;
  156. begin
  157.   Assign(F, FileName);
  158.   Reset(F);
  159.   CreateNew(Current);
  160.   Read(F, Current^);
  161.   First := Current;
  162.   while not Eof(F) do begin
  163.     Prev := Current;
  164.     CreateNew(Current);
  165.     Read(F, Current^);
  166.     Prev^.Next := Current;
  167.   end;
  168.   Close(F);
  169. end;
  170.  
  171. procedure Main(var First, Prev, Current: PMyNode);
  172. var
  173.   F      : Text;
  174. begin
  175.   {$I-}
  176.   Assign (f, 'HW2FILE.TXT');
  177.   Reset(f);
  178.   {$I+}
  179.   if (IOResult <> 0) then begin
  180.     WriteLn('error Reading File');
  181.     Halt;
  182.   end;
  183.   CreateNew(Current);
  184.   ReadLn(F, Current^.Name);
  185.   ReadLn(F, Current^.Flight);
  186.   ReadLn(F, Current^.Day);
  187.   First := Current;
  188.   while not Eof(F) do begin
  189.     Prev := Current;
  190.     CreateNew(Current);
  191.     ReadLn(F, Current^.Name);
  192.     ReadLn(F, Current^.Flight);
  193.     ReadLn(F, Current^.Day);
  194.     Prev^.Next := Current;
  195.   end;
  196.   Close(F);
  197.   Show(First);
  198.   CreateNewFile(First);
  199. end;
  200.  
  201. function WriteMenu: Char;
  202. var
  203.   Ch: Char;
  204. begin
  205.   ClrScr;
  206.   GotoXY(1, 1);
  207.   WriteLn('A) Add');
  208.   WriteLn('D) Delete');
  209.   WriteLn('S) Show');
  210.   WriteLn('W) Write File');
  211.   WriteLn('X) Exit');
  212.   repeat
  213.     Ch := UpCase(ReadKey);
  214.   until Ch in ['A', 'D', 'S', 'W', 'X'];
  215.   WriteMenu := Ch;
  216. end;
  217.  
  218. var
  219.   Ch: Char;
  220.   First,
  221.   Prev,
  222.   Current: PMyNode;
  223.  
  224. begin
  225.   ClrScr;
  226.   {  Main(First, Prev, Current); Use this option to read text file }
  227.   ReadFile(First, Prev, Current);
  228.   repeat
  229.     Ch := WriteMenu;
  230.     case Ch of
  231.       'A': Add(Prev, Current);
  232.       'D': DoDelete(First, Current);
  233.       'S': Show(First);
  234.       'W': CreateNewFile(First);
  235.     end;
  236.   until Ch = 'X';
  237. end.
  238. end. { main program}
  239.